package com.duck.duckchatbackend.test;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class SocketClient {
    public static void main(String[] args) {
        // 定义Socket变量，初始值为null，用于后续创建Socket连接
        Socket socket = null;
        try {
            // 创建Socket连接，指定服务器地址和端口
            socket = new Socket("127.0.0.1", 2077);
            // 获取Socket的输出流，用于向服务器发送数据
            OutputStream outputStream = socket.getOutputStream();
            // 创建PrintWriter对象，用于包装输出流，以便于发送数据
            PrintWriter printWriter = new PrintWriter(outputStream);
            // 提示用户输入要发送的数据
            System.out.println("请输入要发送的内容:");

            new Thread(() -> {
                while (true) {
                    // 创建Scanner对象，用于从控制台读取用户输入
                    Scanner scanner = new Scanner(System.in);
                    // 读取用户输入的一行数据
                    String input = scanner.nextLine();

                    try{
                        // 通过PrintWriter对象发送数据到服务器
                        printWriter.println(input);
                        // 刷新输出流，确保数据被发送
                        printWriter.flush();
                    }catch (Exception e){
                        e.printStackTrace();
                        break;
                    }
                }
            }).start();

            // 从socket中获取输入流，并包装为BufferedReader以便读取
            InputStream inputStream = socket.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

             //编写客户端接收服务器发送的数据的代码
             new Thread(() -> {
                 while (true){
                     try{
                         String readData = bufferedReader.readLine();
                         System.out.println("收到服务器消息->"+readData);
                     }catch (Exception e){
                         e.printStackTrace();
                         break;
                     }
                 }
             }).start();

        } catch (Exception e) {
            // 捕获异常并打印异常信息
            e.printStackTrace();

            //
        }
    }
}
